package com.daify.threadlearn.chapter01.queue;

import java.util.Comparator;
import java.util.concurrent.PriorityBlockingQueue;

/**
 * 其实现基本与PriorityQueue一致，
 * 不过PriorityBlockingQueue是线程安全的，
 * 并且实现了BlockingQueue接口，在队列为空时take会阻塞
 * 内部实现了对PriorityQueue的封装
 * @author daify
 * @date 2019-06-18 13:47
 **/
public class PriorityBlockingQueueTest {

    /**
     * 创建一个长度为11的队列
     */
    PriorityBlockingQueue queue = new PriorityBlockingQueue();

    PriorityBlockingQueue queue3;


    Comparator comparator = new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            // 自定义的排序方式
            return 0;
        }
    };

    public void getQueue3 () {
        /**
         * 创建一个长度为10 ，使用comparator 规则进行排序取值的队列
         */
        queue3 = new PriorityBlockingQueue(10,comparator);
    }

    public static void main(String[] args) {
        PriorityBlockingQueueTest test = new PriorityBlockingQueueTest();
        test.queue.add(1);
        test.queue.add(2);
        System.out.println(test.queue.poll());
        System.out.println(test.queue.poll());
        try {
            System.out.println("进行阻塞的取…………");
            System.out.println(test.queue.take());
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("Interrupted");
        }
        System.out.println("继续放入参数，这个语句不再执行");
        test.queue.add(3);
    }
    
}
